1 /* 2 D bindings for CUDA. 3 Authors: Prasun Anand 4 Copyright: Copyright (c) 2017, Prasun Anand. All rights reserved. 5 License: BSD 3-Clause License 6 */ 7 8 module cuda_d.cuda_runtime_api; 9 10 import cuda_d.cuda; 11 import cuda_d.cublas_api; 12 import cuda_d.vector_types; 13 14 extern (C): 15 16 enum CUDART_VERSION = 7050; 17 18 extern (D) auto __CUDART_API_PTDS(T)(auto ref T api) 19 { 20 return api; 21 } 22 23 extern (D) auto __CUDART_API_PTSZ(T)(auto ref T api) 24 { 25 return api; 26 } 27 28 cudaError_t cudaDeviceReset (); 29 30 cudaError_t cudaDeviceSynchronize (); 31 32 cudaError_t cudaDeviceSetLimit (cudaLimit limit, size_t value); 33 34 cudaError_t cudaDeviceGetLimit (size_t* pValue, cudaLimit limit); 35 36 cudaError_t cudaDeviceGetCacheConfig (cudaFuncCache* pCacheConfig); 37 38 cudaError_t cudaDeviceGetStreamPriorityRange (int* leastPriority, int* greatestPriority); 39 40 cudaError_t cudaDeviceSetCacheConfig (cudaFuncCache cacheConfig); 41 42 cudaError_t cudaDeviceGetSharedMemConfig (cudaSharedMemConfig* pConfig); 43 44 cudaError_t cudaDeviceSetSharedMemConfig (cudaSharedMemConfig config); 45 46 cudaError_t cudaDeviceGetByPCIBusId (int* device, const(char)* pciBusId); 47 48 cudaError_t cudaDeviceGetPCIBusId (char* pciBusId, int len, int device); 49 50 cudaError_t cudaIpcGetEventHandle (cudaIpcEventHandle_t* handle, cudaEvent_t event); 51 52 cudaError_t cudaIpcOpenEventHandle (cudaEvent_t* event, cudaIpcEventHandle_t handle); 53 54 cudaError_t cudaIpcGetMemHandle (cudaIpcMemHandle_t* handle, void* devPtr); 55 56 cudaError_t cudaIpcOpenMemHandle (void** devPtr, cudaIpcMemHandle_t handle, uint flags); 57 58 cudaError_t cudaIpcCloseMemHandle (void* devPtr); 59 60 cudaError_t cudaThreadExit (); 61 62 cudaError_t cudaThreadSynchronize (); 63 64 cudaError_t cudaThreadSetLimit (cudaLimit limit, size_t value); 65 66 cudaError_t cudaThreadGetLimit (size_t* pValue, cudaLimit limit); 67 68 cudaError_t cudaThreadGetCacheConfig (cudaFuncCache* pCacheConfig); 69 70 cudaError_t cudaThreadSetCacheConfig (cudaFuncCache cacheConfig); 71 72 cudaError_t cudaGetLastError (); 73 74 cudaError_t cudaPeekAtLastError (); 75 76 const(char)* cudaGetErrorName (cudaError_t error); 77 78 79 const(char)* cudaGetErrorString (cudaError_t error); 80 81 cudaError_t cudaGetDeviceCount (int* count); 82 83 cudaError_t cudaGetDeviceProperties (cudaDeviceProp* prop, int device); 84 85 //cudaError_t cudaDeviceGetAttribute (int* value, cudaDeviceAttr attr, int device); 86 87 cudaError_t cudaChooseDevice (int* device, const(cudaDeviceProp)* prop); 88 89 cudaError_t cudaSetDevice (int device); 90 91 cudaError_t cudaGetDevice (int* device); 92 93 cudaError_t cudaSetValidDevices (int* device_arr, int len); 94 95 cudaError_t cudaSetDeviceFlags (uint flags); 96 97 cudaError_t cudaGetDeviceFlags (uint* flags); 98 99 cudaError_t cudaStreamCreate (cudaStream_t* pStream); 100 101 cudaError_t cudaStreamCreateWithFlags (cudaStream_t* pStream, uint flags); 102 103 cudaError_t cudaStreamCreateWithPriority (cudaStream_t* pStream, uint flags, int priority); 104 105 cudaError_t cudaStreamGetPriority (cudaStream_t hStream, int* priority); 106 107 cudaError_t cudaStreamGetFlags (cudaStream_t hStream, uint* flags); 108 109 cudaError_t cudaStreamDestroy (cudaStream_t stream); 110 111 cudaError_t cudaStreamWaitEvent (cudaStream_t stream, cudaEvent_t event, uint flags); 112 113 alias cudaStreamCallback_t = void function (cudaStream_t stream, cudaError_t status, void* userData); 114 115 116 cudaError_t cudaStreamAddCallback ( 117 cudaStream_t stream, 118 cudaStreamCallback_t callback, 119 void* userData, 120 uint flags); 121 122 123 cudaError_t cudaStreamSynchronize (cudaStream_t stream); 124 125 cudaError_t cudaStreamQuery (cudaStream_t stream); 126 127 cudaError_t cudaStreamAttachMemAsync (cudaStream_t stream, void* devPtr, size_t length, uint flags); 128 129 cudaError_t cudaEventCreate (cudaEvent_t* event); 130 131 cudaError_t cudaEventCreateWithFlags (cudaEvent_t* event, uint flags); 132 133 cudaError_t cudaEventRecord (cudaEvent_t event, cudaStream_t stream); 134 135 136 cudaError_t cudaEventQuery (cudaEvent_t event); 137 138 cudaError_t cudaEventSynchronize (cudaEvent_t event); 139 140 cudaError_t cudaEventDestroy (cudaEvent_t event); 141 142 cudaError_t cudaEventElapsedTime (float* ms, cudaEvent_t start, cudaEvent_t end); 143 144 cudaError_t cudaLaunchKernel (const(void)* func, dim3 gridDim, dim3 blockDim, void** args, size_t sharedMem, cudaStream_t stream); 145 146 cudaError_t cudaFuncSetCacheConfig (const(void)* func, cudaFuncCache cacheConfig); 147 148 cudaError_t cudaFuncSetSharedMemConfig (const(void)* func, cudaSharedMemConfig config); 149 150 //cudaError_t cudaFuncGetAttributes (cudaFuncAttributes* attr, const(void)* func); 151 152 cudaError_t cudaSetDoubleForDevice (double* d); 153 154 cudaError_t cudaSetDoubleForHost (double* d); 155 156 cudaError_t cudaOccupancyMaxActiveBlocksPerMultiprocessor (int* numBlocks, const(void)* func, int blockSize, size_t dynamicSMemSize); 157 158 cudaError_t cudaOccupancyMaxActiveBlocksPerMultiprocessorWithFlags (int* numBlocks, const(void)* func, int blockSize, size_t dynamicSMemSize, uint flags); 159 160 cudaError_t cudaConfigureCall (dim3 gridDim, dim3 blockDim, size_t sharedMem, cudaStream_t stream); 161 162 cudaError_t cudaSetupArgument (const(void)* arg, size_t size, size_t offset); 163 164 cudaError_t cudaLaunch (const(void)* func); 165 166 cudaError_t cudaMallocManaged (void** devPtr, size_t size, uint flags); 167 168 cudaError_t cudaMalloc (void** devPtr, size_t size); 169 170 cudaError_t cudaMallocHost (void** ptr, size_t size); 171 172 cudaError_t cudaMallocPitch (void** devPtr, size_t* pitch, size_t width, size_t height); 173 174 //cudaError_t cudaMallocArray (cudaArray_t* array, const(cudaChannelFormatDesc)* desc, size_t width, size_t height, uint flags); 175 176 cudaError_t cudaFree (void* devPtr); 177 178 cudaError_t cudaFreeHost (void* ptr); 179 180 cudaError_t cudaFreeArray (cudaArray_t array); 181 182 //cudaError_t cudaFreeMipmappedArray (cudaMipmappedArray_t mipmappedArray); 183 184 cudaError_t cudaHostAlloc (void** pHost, size_t size, uint flags); 185 186 cudaError_t cudaHostRegister (void* ptr, size_t size, uint flags); 187 188 cudaError_t cudaHostUnregister (void* ptr); 189 190 cudaError_t cudaHostGetDevicePointer (void** pDevice, void* pHost, uint flags); 191 192 cudaError_t cudaHostGetFlags (uint* pFlags, void* pHost); 193 194 //cudaError_t cudaMalloc3D (cudaPitchedPtr* pitchedDevPtr, cudaExtent extent); 195 196 //cudaError_t cudaMalloc3DArray (cudaArray_t* array, const(cudaChannelFormatDesc)* desc, cudaExtent extent, uint flags); 197 198 //cudaError_t cudaMallocMipmappedArray (cudaMipmappedArray_t* mipmappedArray, const(cudaChannelFormatDesc)* desc, cudaExtent extent, uint numLevels, uint flags); 199 200 //cudaError_t cudaGetMipmappedArrayLevel (cudaArray_t* levelArray, cudaMipmappedArray_const_t mipmappedArray, uint level); 201 202 //http://horacio9573.no-ip.org/cuda/structcudaMemcpy3DParms.html 203 //cudaError_t cudaMemcpy3D (const(cudaMemcpy3DParms)* p); 204 205 //cudaError_t cudaMemcpy3DPeer (const(cudaMemcpy3DPeerParms)* p); 206 207 //cudaError_t cudaMemcpy3DAsync (const(cudaMemcpy3DParms)* p, cudaStream_t stream); 208 209 //cudaError_t cudaMemcpy3DPeerAsync (const(cudaMemcpy3DPeerParms)* p, cudaStream_t stream); 210 211 cudaError_t cudaMemGetInfo (size_t* free, size_t* total); 212 213 //cudaError_t cudaArrayGetInfo (cudaChannelFormatDesc* desc, cudaExtent* extent, uint* flags, cudaArray_t array); 214 215 cudaError_t cudaMemcpy (void* dst, const(void)* src, size_t count, cudaMemcpyKind kind); 216 217 cudaError_t cudaMemcpyPeer (void* dst, int dstDevice, const(void)* src, int srcDevice, size_t count); 218 219 cudaError_t cudaMemcpyToArray (cudaArray_t dst, size_t wOffset, size_t hOffset, const(void)* src, size_t count, cudaMemcpyKind kind); 220 221 cudaError_t cudaMemcpyFromArray (void* dst, cudaArray_const_t src, size_t wOffset, size_t hOffset, size_t count, cudaMemcpyKind kind); 222 223 cudaError_t cudaMemcpyArrayToArray (cudaArray_t dst, size_t wOffsetDst, size_t hOffsetDst, cudaArray_const_t src, size_t wOffsetSrc, size_t hOffsetSrc, size_t count, cudaMemcpyKind kind); 224 225 cudaError_t cudaMemcpy2D (void* dst, size_t dpitch, const(void)* src, size_t spitch, size_t width, size_t height, cudaMemcpyKind kind); 226 227 cudaError_t cudaMemcpy2DToArray (cudaArray_t dst, size_t wOffset, size_t hOffset, const(void)* src, size_t spitch, size_t width, size_t height, cudaMemcpyKind kind); 228 229 cudaError_t cudaMemcpy2DFromArray (void* dst, size_t dpitch, cudaArray_const_t src, size_t wOffset, size_t hOffset, size_t width, size_t height, cudaMemcpyKind kind); 230 231 cudaError_t cudaMemcpy2DArrayToArray (cudaArray_t dst, size_t wOffsetDst, size_t hOffsetDst, cudaArray_const_t src, size_t wOffsetSrc, size_t hOffsetSrc, size_t width, size_t height, cudaMemcpyKind kind); 232 233 cudaError_t cudaMemcpyToSymbol (const(void)* symbol, const(void)* src, size_t count, size_t offset, cudaMemcpyKind kind); 234 235 cudaError_t cudaMemcpyFromSymbol (void* dst, const(void)* symbol, size_t count, size_t offset, cudaMemcpyKind kind); 236 237 cudaError_t cudaMemcpyAsync (void* dst, const(void)* src, size_t count, cudaMemcpyKind kind, cudaStream_t stream); 238 239 cudaError_t cudaMemcpyPeerAsync (void* dst, int dstDevice, const(void)* src, int srcDevice, size_t count, cudaStream_t stream); 240 241 cudaError_t cudaMemcpyToArrayAsync (cudaArray_t dst, size_t wOffset, size_t hOffset, const(void)* src, size_t count, cudaMemcpyKind kind, cudaStream_t stream); 242 243 cudaError_t cudaMemcpyFromArrayAsync (void* dst, cudaArray_const_t src, size_t wOffset, size_t hOffset, size_t count, cudaMemcpyKind kind, cudaStream_t stream); 244 245 cudaError_t cudaMemcpy2DAsync (void* dst, size_t dpitch, const(void)* src, size_t spitch, size_t width, size_t height, cudaMemcpyKind kind, cudaStream_t stream); 246 247 cudaError_t cudaMemcpy2DToArrayAsync (cudaArray_t dst, size_t wOffset, size_t hOffset, const(void)* src, size_t spitch, size_t width, size_t height, cudaMemcpyKind kind, cudaStream_t stream); 248 249 cudaError_t cudaMemcpy2DFromArrayAsync (void* dst, size_t dpitch, cudaArray_const_t src, size_t wOffset, size_t hOffset, size_t width, size_t height, cudaMemcpyKind kind, cudaStream_t stream); 250 251 cudaError_t cudaMemcpyToSymbolAsync (const(void)* symbol, const(void)* src, size_t count, size_t offset, cudaMemcpyKind kind, cudaStream_t stream); 252 253 cudaError_t cudaMemcpyFromSymbolAsync (void* dst, const(void)* symbol, size_t count, size_t offset, cudaMemcpyKind kind, cudaStream_t stream); 254 255 cudaError_t cudaMemset (void* devPtr, int value, size_t count); 256 257 cudaError_t cudaMemset2D (void* devPtr, size_t pitch, int value, size_t width, size_t height); 258 259 //cudaError_t cudaMemset3D (cudaPitchedPtr pitchedDevPtr, int value, cudaExtent extent); 260 261 //cudaError_t cudaMemsetAsync (void* devPtr, int value, size_t count, cudaStream_t stream); 262 263 //cudaError_t cudaMemset2DAsync (void* devPtr, size_t pitch, int value, size_t width, size_t height, cudaStream_t stream); 264 265 //cudaError_t cudaMemset3DAsync (cudaPitchedPtr pitchedDevPtr, int value, cudaExtent extent, cudaStream_t stream); 266 267 //cudaError_t cudaGetSymbolAddress (void** devPtr, const(void)* symbol); 268 269 //cudaError_t cudaGetSymbolSize (size_t* size, const(void)* symbol); 270 271 //cudaError_t cudaPointerGetAttributes (cudaPointerAttributes* attributes, const(void)* ptr); 272 273 //cudaError_t cudaDeviceCanAccessPeer (int* canAccessPeer, int device, int peerDevice); 274 275 //cudaError_t cudaDeviceEnablePeerAccess (int peerDevice, uint flags); 276 277 //cudaError_t cudaDeviceDisablePeerAccess (int peerDevice); 278 279 //cudaChannelFormatDesc cudaCreateChannelDesc (int x, int y, int z, int w, cudaChannelFormatKind f); 280 281 //cudaError_t cudaGraphicsUnregisterResource (cudaGraphicsResource_t resource); 282 283 //cudaError_t cudaGraphicsResourceSetMapFlags (cudaGraphicsResource_t resource, uint flags); 284 285 //cudaError_t cudaGraphicsMapResources (int count, cudaGraphicsResource_t* resources, cudaStream_t stream); 286 287 //cudaError_t cudaGraphicsUnmapResources (int count, cudaGraphicsResource_t* resources, cudaStream_t stream); 288 289 //cudaError_t cudaGraphicsResourceGetMappedPointer (void** devPtr, size_t* size, cudaGraphicsResource_t resource); 290 291 //cudaError_t cudaGraphicsSubResourceGetMappedArray (cudaArray_t* array, cudaGraphicsResource_t resource, uint arrayIndex, uint mipLevel); 292 293 //cudaError_t cudaGraphicsResourceGetMappedMipmappedArray (cudaMipmappedArray_t* mipmappedArray, cudaGraphicsResource_t resource); 294 295 //cudaError_t cudaGetChannelDesc (cudaChannelFormatDesc* desc, cudaArray_const_t array); 296 297 //cudaError_t cudaBindTexture (size_t* offset, const(textureReference)* texref, const(void)* devPtr, const(cudaChannelFormatDesc)* desc, size_t size); 298 299 //cudaError_t cudaBindTexture2D (size_t* offset, const(textureReference)* texref, const(void)* devPtr, const(cudaChannelFormatDesc)* desc, size_t width, size_t height, size_t pitch); 300 301 //cudaError_t cudaBindTextureToArray (const(textureReference)* texref, cudaArray_const_t array, const(cudaChannelFormatDesc)* desc); 302 303 //cudaError_t cudaBindTextureToMipmappedArray (const(textureReference)* texref, cudaMipmappedArray_const_t mipmappedArray, const(cudaChannelFormatDesc)* desc); 304 305 //cudaError_t cudaUnbindTexture (const(textureReference)* texref); 306 307 //cudaError_t cudaGetTextureAlignmentOffset (size_t* offset, const(textureReference)* texref); 308 309 //cudaError_t cudaGetTextureReference (const(textureReference*)* texref, const(void)* symbol); 310 311 //cudaError_t cudaBindSurfaceToArray (const(surfaceReference)* surfref, cudaArray_const_t array, const(cudaChannelFormatDesc)* desc); 312 313 //cudaError_t cudaGetSurfaceReference (const(surfaceReference*)* surfref, const(void)* symbol); 314 315 //cudaError_t cudaCreateTextureObject (cudaTextureObject_t* pTexObject, const(cudaResourceDesc)* pResDesc, const(cudaTextureDesc)* pTexDesc, const(cudaResourceViewDesc)* pResViewDesc); 316 317 //cudaError_t cudaDestroyTextureObject (cudaTextureObject_t texObject); 318 319 //cudaError_t cudaGetTextureObjectResourceDesc (cudaResourceDesc* pResDesc, cudaTextureObject_t texObject); 320 321 //cudaError_t cudaGetTextureObjectTextureDesc (cudaTextureDesc* pTexDesc, cudaTextureObject_t texObject); 322 323 //cudaError_t cudaGetTextureObjectResourceViewDesc (cudaResourceViewDesc* pResViewDesc, cudaTextureObject_t texObject); 324 325 //cudaError_t cudaCreateSurfaceObject (cudaSurfaceObject_t* pSurfObject, const(cudaResourceDesc)* pResDesc); 326 327 //cudaError_t cudaDestroySurfaceObject (cudaSurfaceObject_t surfObject); 328 329 //cudaError_t cudaGetSurfaceObjectResourceDesc (cudaResourceDesc* pResDesc, cudaSurfaceObject_t surfObject); 330 331 //cudaError_t cudaDriverGetVersion (int* driverVersion); 332 333 //cudaError_t cudaRuntimeGetVersion (int* runtimeVersion); 334 335 //cudaError_t cudaGetExportTable (const(void*)* ppExportTable, const(cudaUUID_t)* pExportTableId);